// NEVER SAY DIE => never-say-die

const _ = require('lodash');

// join函数改写 柯里化的join 在组合中 可以事先传入使用哪种方式组合
const join = _.curry((sep, arr) => arr.join(sep));

// split函数改写 柯里化的split 在组合中 可以事先传入使用哪种方式分割 
const split = _.curry((sep, str) => str.split(sep));

// 柯里化的日志函数 可以在调用的时候传入特殊的符号标记当前处于哪一步
// tag是写入的标记符号
// v是上一个函数返回的值 在打印完后直接传给下一个函数
const trace = _.curry((tag, v) => {
  console.log(tag, v);
  return v;
})

// map改写
// 柯里化 匿名函数 第一个参是fn 第二个是要处理的数组
const map = _.curry((fn, arr) => _.map(arr, fn));

// const handler = _.flowRight(join('-'), split(' '), log, _.toLower);
const handler = _.flowRight(join('-'), trace('map 之后'), map(_.toLower), trace('split 之后'), split(' '));
// 步骤分析
// 1: handle调用传入的字符串 经过 类型为 ' ' 分割 
// 2: 打印 标记为 split 之后 的经过split分割后的结果
// 3：将结果传给map map中是将数组的每一项变成小写 并返回处理后的结果
// 4： 同2
// 5: 将都变成小写的结果数组 传入join 以 '-' 拼接 并将结果返回

let a = handler('NEVER SAY DIE');
console.log(a);